﻿#include "xplaneConnect.h"
#include "Thread.h"
#ifndef WIN32
#include <Windows.h>
#endif 

#ifdef __cplusplus
extern "C" {
#endif

    // 强制NVIDIA显卡渲染
    __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;

    // 强制AMD显卡渲染
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;

#ifdef __cplusplus
}
#endif
#include "HomePage.h"

using namespace std;

int main()
{


    int height, width;
    // 禁用系统DPI缩放，获取物理分辨率
    SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);

    setcaption("N172SP");
    initgraph(-1, -1, INIT_NOFORCEEXIT | INIT_NOBORDER); // 初始化全屏窗口（无边框模式）

    const char* IP = MYIP;      //IP Address of computer running X-Plane
    XPCSocket sock = openUDP(IP);

    width = getwidth();
    height = getheight();

    // 基准分辨率
    const float base_width = 2560.0f;
    const float base_height = 1600.0f;

    // 计算缩放因子和偏移量
    float scale_x = static_cast<float>(width) / base_width;
    float scale_y = static_cast<float>(height) / base_height;
    float scale = min(scale_x, scale_y);
    int render_width = static_cast<int>(base_width * scale);
    int render_height = static_cast<int>(base_height * scale);
    int offset_x = (width - render_width) / 2;
    int offset_y = (height - render_height) / 2;

    ege_enable_aa(true);

    // 创建并绘制临时主页图像（基准分辨率）
    PIMAGE temp_homepage = newimage(base_width, base_height);
    settarget(temp_homepage);
    drawHomePage(base_width, base_height);
    settarget(nullptr);

    // 缩放临时主页图像到渲染尺寸
    PIMAGE homepage = newimage(render_width, render_height);
    putimage(homepage, 0, 0, render_width, render_height, temp_homepage, 0, 0, base_width, base_height);
    delimage(temp_homepage);

    // 创建读取数据线程
    thread dataThread(xplaneDataThread);

    // 创建绘制线程
    thread drawThread(drawingThread, width, height, homepage, scale, offset_x, offset_y);

    // 等待数据获取线程和绘制线程结束
    dataThread.join();
    drawThread.join();


    // 按顺序释放资源
    delimage(homepage);
    closeUDP(sock);
    closegraph();
    return 0;
}


//未完善部分
//int main()
//{
//    int height, width;
//    // 禁用系统DPI缩放，获取物理分辨率
//    SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
//
//    setcaption("N172SP");
//    initgraph(-1, -1, INIT_NOFORCEEXIT | INIT_NOBORDER); // 初始化全屏窗口（无边框模式）
//    
//    const char* IP = MYIP;      //IP Address of computer running X-Plane
//    XPCSocket sock = openUDP(IP);
//
//    width = getwidth();
//    height = getheight();
//
//    // 基准分辨率
//    const float base_width = 2560.0f;
//    const float base_height = 1600.0f;
//
//    // 计算缩放因子和偏移量
//    float scale_x = static_cast<float>(width) / base_width;
//    float scale_y = static_cast<float>(height) / base_height;
//    float scale = min(scale_x, scale_y);
//    int render_width = static_cast<int>(base_width * scale);
//    int render_height = static_cast<int>(base_height * scale);
//    int offset_x = (width - render_width) / 2;
//    int offset_y = (height - render_height) / 2;
//
//    ege_enable_aa(true);
//
//    // 创建并绘制临时主页图像（基准分辨率）
//    PIMAGE temp_homepage = newimage(base_width, base_height);
//    settarget(temp_homepage);
//    drawHomePage(base_width, base_height);
//    settarget(nullptr);
//
//    // 缩放临时主页图像到渲染尺寸
//    PIMAGE homepage = newimage(render_width, render_height);
//    putimage(homepage, 0, 0, render_width, render_height, temp_homepage, 0, 0, base_width, base_height);
//    delimage(temp_homepage);
//
//    // 创建读取数据线程
//    thread dataThread(xplaneDataThread);
//
//    // 创建绘制线程
//    thread drawThread(drawingThread, width, height, homepage, scale, offset_x, offset_y);
//
//    // 等待数据获取线程和绘制线程结束
//    dataThread.join();
//    drawThread.join();
//
//    // 按顺序释放资源
//    delimage(homepage);
//    closeUDP(sock);
//    closegraph();
//    return 0;
//}